(function ($) {
    $.conditionstub = function (options) {
        var _conditionstub = {
            options: {
                //条件项的组的集合，一个条件项的组结构必须如下（下面称其为条件组）,组为一个div，其内部的各条件项为a，组与a是父子关系
                /*<div class="tad_ft" id="years">
                 <a class="selected" href="javascript:void(0)"  inputValue="2015">2015</a>
                 <a href="javascript:void(0)"  inputValue="2016">2016</a>
                 </div>*/
                //如上的结构对应的一个组配置为
                /* {
                 id:"years",
                 inputId:"year"
                 }*/
                conditionsGroups:[
                    {
                        id:"group1-1",
                        //每个条件组中的选中项的值要保存的目标input的ID及name
                        //inputId可以是冒号(可以配置其他分隔符)分割的字符串，冒号间的每个字符串代表此条件项中的数据要保存到的input的id，比如inputId:"minPrice:maxPrice"
                        //代表分别要保存到id和name为minPrice的input和id和name为maxPrice的input。
                        inputId:""
                    },
                    {
                        id:"group1-2",
                        inputId:"",
                        onclick : function (groupJdom) { //当此组下的某一条件项被点击时触发，groupJdom：条件组div的jquery对象。
                        }
                    }
                ],
                //autoGenerateForm: true,是否自动生成保存各条件组的选中值的input及其form, 默认情况下会自动生成。
                inputFormId:"conds",//用于保存由用来保存各条件组的选中项的hidden组成的集合的form的id，如果是已经存在的，那么就向其中apend，否则创建id为ci'zhi
                keepInputValueAtrrName:"inputValue", //保存所有条件项对应的值的属性名称。
                inputCompontIdPostfix : "input",//条件组中的inputId设置了input的
                onclick : function (group, item, args) { //当点击任意条件项时触发此事件，args为所有条件选中值的url参数。
                    alert(args);
                },
                valueSeparator:":",//条件组中inputId及条件项中keepInputValueAtrrName对应的属性名存储的值的分隔符。
                selectedCondClassName:"selected",
                isAjax:false,//如果通过ajax跟服务端进行交互，一定要把此项设置为true
                _keepInputIdAttrName:"inputid"
            },

            init:function () {
            	
                var selectstr = ''; //所有条件项的选择器字符串
                var inputFormId = _conditionstub.options.inputFormId;

                var condsInputs = "";//保存各条件项的选中值的input的集合
                var groups = _conditionstub.options.conditionsGroups;
                var keepInputIdAttrName = _conditionstub.options._keepInputIdAttrName;
                var keepInputValueAtrrName = _conditionstub.options.keepInputValueAtrrName;
                var inputCompontIdPostfix = _conditionstub.options.inputCompontIdPostfix;
                var inputPostFix = _conditionstub.options.inputPostFix;
                var valueSeparator = _conditionstub.options.valueSeparator;
                var selectedCondClassName = _conditionstub.options.selectedCondClassName;
                var selectValues="";
                for (var i =0 ; i < groups.length ; i++) {
                    var group = groups[i];

                    //在每个条件项的最外层中保存此条件项中的值要保存的input的id
                    $("#" + group.id).attr(keepInputIdAttrName, group.inputId);
                   
                    selectstr += "#" + group.id + " a,";
                   
                    var inputIds = group.inputId.split(valueSeparator);
                    $.each(inputIds, function (i, inputId) {
                    	 
                        //如果找不到用来存储条件项的值的控件，那么就创建
                        if (!$("#" + inputFormId + " [name=" + inputId.replace(/\./g,"\\.") + "]").get(0)) {
                            var realInputId = inputId.replace(/\./g,"_"); + inputCompontIdPostfix;
                            condsInputs += '<input type="hidden" id="' + realInputId + '" name="'+inputId+'" value=""/>';
                        }
                      
                    });
                }
             
                //去掉最后的逗号
                selectstr = selectstr.substring(0, selectstr.length - 1);
                var inputForm = $("#" + inputFormId).get(0) ||  $('<form id="'+inputFormId+'"></form>');
                $(inputForm).append($(condsInputs));
                $("#" + inputFormId).get(0) || $("body").append(inputForm);
               
              //alert(selectstr);
                $(selectstr).live("click",function() {
                	
                        $(this).siblings("a").removeClass(selectedCondClassName);
                        $(this).addClass(selectedCondClassName);

                        var container = $(this).parent("[" + keepInputIdAttrName + "]");
                        var inputIds = container.attr(keepInputIdAttrName).split(valueSeparator);

                        var values= $(this).attr(keepInputValueAtrrName) && $(this).attr(keepInputValueAtrrName).split(valueSeparator) || "";

                        $.each(inputIds, function (i, inputId) {
                            var realInputId = inputId.replace(/\./g,"_"); + inputCompontIdPostfix;
                            $("#"+inputFormId+" #" + realInputId).val(values[i] || "");
                        });
                       
                        //某个条件组如果设置了onclick事件，那么当此条件组下的条件项被点击时激活它。
                        $.each(groups, function (i, group) {

                            if (group.id == container.attr("id")) {
                                group.onclick && group.onclick($(container));
                                return;
                            }
                        });

                        //alert($("#" + inputFormId).serialize());
                    }
                
                );
                //删除选择块
                $(".selectedShow em").live("click",function(){
                    $(this).parents(".selectedShow").addClass("none");
                    var listName = $(this).parent("div").attr("name");
                    $("#"+listName).find("a").eq(0).click();
                    });
                //清除筛选条件
                $(".eliminateCriteria").live("click",function(){
                	//alert($(".hasBeenSelected").find(".selectedShow").eq(0).html());
                	$(".hasBeenSelected").find(".selectedShow").each(function(){
                	   var listName=$(this).attr("name");
                	   $("#"+listName).find("a").eq(0).click();
                	  });
                	
                    });
                //如果点击了任意条件项，那么就调用onclick方法
                for (var i =0 ; i < groups.length ; i++) {
                    var group = groups[i];
                    var selectstr = "#" + group.id + " a,";
                    (function (group) {
                        $(selectstr).live("click", function () {
                            _conditionstub.options.onclick(group, this, $("#" + inputFormId).serialize());
                        });
                    })(group);

                }
               

                var stateKeepGroups = [];
                $.each(groups, function (i, group) {
                    var stateKeepGroup = {};
                    stateKeepGroup.id = group.id;
                    stateKeepGroup.multiSelectAble = false;
                    stateKeepGroup.itemSelector = "#" + group.id + " a"
                    stateKeepGroups.push(stateKeepGroup);
                });
              
                if (!_conditionstub.options.isAjax) {
                    $.stateKeeper({
                        stateKeepItemClassName:selectedCondClassName,
                        formId:inputFormId,
                        stateKeepGroups : stateKeepGroups,
                        selectValues:selectValues
                    });
                }
            }
        };
       
        _conditionstub.options =  $.extend(_conditionstub.options, options);
      
        _conditionstub.init();
     
    };
})(jQuery);
